home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 147
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin
/
docs
/
ippon
/
data
/
patfont2.lzh
/
PATFONT2TEXT.c
< prev
next >
Wrap
C/C++ Source or Header
|
1999-05-06
|
3KB
|
146 lines
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <io.h>
unsigned short *pat_file = NULL;
unsigned char *text_work = NULL;
void usage (void)
{
printf ("水平形式フォント変換 PATFONT2TEXT.X ver0.02\n"
" programmed by Mitsuky <FreeSoftware>\n"
".PAT 形式のフォントファイルを水平2ページの形式に変換します\n"
"使用法 : PATFONT2TEXT 読み込みファイル名.PAT 書き出しファイル名\n"
"16388 バイトの .PAT ファイル専用です\n");
}
int load_sp (char *fname)
{
FILE *fp;
if ((fp = fopen (fname, "rb")) == NULL) {
printf ("%s が読めません\n", fname);
exit (-1);
}
pat_file = malloc (256 * 16 * 2 * 2 + 4); /* +4 は .PAT ファイルのヘッダ */
fread (pat_file, 256 * 16 * 2 * 2 + 4, 1, fp);
fclose (fp);
return (0);
}
int save_text (char *fname)
{
FILE *fp;
if ((fp = fopen (fname, "wb")) == NULL) {
printf ("%s が書けません\n", fname);
exit (-1);
}
fwrite (text_work, 2 * 8 * 32 * 2 * 2, sizeof (unsigned char), fp);
fclose (fp);
return (0);
}
void conv (void)
{
int i, j, k, x, y;
unsigned short *p, *p2;
unsigned short c;
unsigned char t0, t1, w;
unsigned char *q;
text_work = malloc (2048);
q = text_work;
for (k = 0; k < 2; k++) {
for (i = 0; i < 32; i++) {
for (j = 0; j < 2; j++) {
p = pat_file + 2 + i * 8 + j * 256 * 8 + k * 4096; /* p = 左上のアドレス */
for (y = 0; y < 8; y++) {
p2 = p;
t0 = t1 = 0;
w = 0x80; /* チェックするビット */
for (x = 0; x < 8; x++) {
c = *p2++;
if (c == 0x0f) {
t0 |= w; /* 0x0f なら両ページセット
*/
t1 |= w;
}
if (c == 0x0e) {
t1 |= w; /* 0x0e なら1ページのみセ
ット */
}
if (c == 0x0d) {
t0 |= w; /* 0x0d なら0ページのみセ
ット */
}
w >>= 1;
}
*q = t0;
*(q + 8) = t1;
q++;
p += 256;
}
q += 8;
}
}
}
}
int main (int argc, char *argv[])
{
int i;
int slash_flag = 0;
char *load_fname = NULL, *save_fname = NULL;
{
char *temp;
temp = getenv ("SLASH");
if ((temp != NULL) && (*temp == '/')) {
slash_flag = 1;
}
}
for (i = 1; i < argc; i++) {
if (('-' == *argv[i]) || ((slash_flag == 0) && ('/' == *argv[i]))) {
switch (*(argv[i] + 1)) {
case 's':
case 'S':
break;
default:
usage ();
return (-1);
}
} else {
if (load_fname == NULL)
load_fname = argv[i];
else
save_fname = argv[i];
}
}
if (save_fname == NULL) {
usage ();
return (-1);
}
load_sp (load_fname);
conv ();
save_text (save_fname);
return (0);
}